<?php
/**
 * crcl/base
 *
 * Copyright 2013 CRCL - André Sabosch - info@crcl.de
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

namespace crcl\base\mvc\controller;

interface IConcrete
{
  /**
   * Redirect via 301 header (moved pemanently)
   *
   * @param string  $sUrl
   */
  public function redirect($sUrl);

  /**
   * Sets command object
   * used internally  - use with care
   *
   * @param \crcl\base\mvc\ICommand $oCommand
   */
  public function setCommand(\crcl\base\mvc\ICommand $oCommand);

  /**
   * Gets command object
   *
   * @return \crcl\base\mvc\ICommand
   */
  public function getCommand();

  /**
   * This event is executed before action. Should be overriden in controller.
   */
  public function onPreAction();
}

class Base implements IConcrete
{
  //tested with http call
  //@codeCoverageIgnoreStart
  public function redirect($sUrl)
  {
    $this->oCommand->setStatus(\crcl\base\mvc\Response::STATUS_REDIRECT_PERMANENT);
    $this->oCommand->setHeaders(array('Location' => $sUrl));
  }
  //@codeCoverageIgnoreEnd

  public function setCommand(\crcl\base\mvc\ICommand $oCommand)
  {
    $this->oCommand = $oCommand;
  }

  public function getCommand()
  {
    return $this->oCommand;
  }

  public function onPreAction()
  {
  }

  /** PROTECTED ***********************************************************************************/

  protected $oCommand;
}
